package grafo;

import java.util.ArrayList;

/**
 *
 * @author Alexandre
 * @author Lucas
 */
public class Vertice {

    int idVertice;
    int x, y;
    public ArrayList<Aresta> Arestas; //Lista de arestas que iniciam neste vertice

    Vertice(int id, int _x, int _y) {
        this.idVertice = id;
        Arestas = new ArrayList<>();
        x = _x;
        y = _y;
    }

    public int getIdVertice() {
        return idVertice;
    }

    public boolean addAresta(int idDestino) {
        int cont = 0;
        //Verifica se já existe a aresta
        for (Aresta Aresta : Arestas) {
            if (Aresta.getIdDestino() == idDestino) {
                ++cont;
            }
        }
        //Caso não exista insere a aresta na lista
        if (cont == 0 && idVertice != idDestino) {
            //calculando o custo
            double custo;
            int xd = -1, yd = -1;
            for (Vertice Vertice : Grafo.Vertices) {
                if (Vertice.getIdVertice() == idDestino) {
                    xd = Vertice.getX();
                    yd = Vertice.getY();
                }
            }
            if (xd != -1 && yd != -1) {
                custo = Math.sqrt(Math.pow((x - xd), 2) + Math.pow((y - yd), 2));
                Arestas.add(new Aresta(idDestino, custo));
                return true;
            }
        }
        return false;
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    /**
     * Quantidade de arestas
     *
     * @return Retorna a quantidade de arestas
     */
    public int getsize() {
        return Arestas.size();
    }

    /**
     * Imprime todas as arestas deste vértice
     */
    public void ShowArestas() {
        if (!Arestas.isEmpty()) {
            System.out.println("Arestas:");
        }
        for (Aresta Aresta : Arestas) {
            System.out.println("Destino = " + Aresta.getIdDestino() + "\tCusto = " + Aresta.getCusto());
        }
        if (!Arestas.isEmpty()) {
            System.out.println();
        }
    }

    /**
     * Imprime a lista de adjacência do vertice
     */
    void ShowListaAdjacencia() {
        for (Aresta Aresta : Arestas) {
            System.out.println("Aresta [ " + this.idVertice + ", " + Aresta.getIdDestino() + " ] com Custo = " + Aresta.getCusto());
        }
    }

    /**
     * 
     * Retorna todos os pontos a partir deste vértice
     * @return retorna as arestas do vértice
     */
    public String ListaArestas() {
        String retorno = "";
        for (Aresta Aresta : Arestas) {
            retorno += Aresta.getIdDestino() + ";";
        }
        return retorno;
    }

}
